// ----------------------------------------------------------------------------
// vector3.h
// ----------------------------------------------------------------------------
/*
 Description:
 3要素ベクトルクラス. vectormathを利用している.  
 
 ----------------------------------------------------------------
 使い方.

 */
#pragma once
#include <fw/base/core/macros.h>
#ifdef  FW_BASE_VECTORMATH_USE_SCALAR
#include <external/vectormath/scalar/cpp/vectormath_aos.h>
#else
#include <external/vectormath/SSE/cpp/vectormath_aos.h>
#endif

namespace fw
{
	typedef Vectormath::Aos::Vector3 vec3;
	typedef Vectormath::Aos::Vector3 float3;

	// 環境によって引数の型を変更する.
	// FW_FASTCALL宣言を関数に利用した場合、３つの引数まではavec3(afloat3)を利用することで
	// 引数の引渡しが最適化される可能性がある.
#if   (FW_TARGET_WINDOWS == 1) && (FW_TARGET_32BIT == 1)
	typedef const vec3    avec3;
	typedef const float3  afloat3;
	typedef const vec3&   bvec3;
	typedef const float3& bfloat3;
	
#elif (FW_TARGET_WINDOWS == 1) && (FW_TARGET_64BIT == 1)
	typedef const vec3&   avec3;
	typedef const float3& afloat3;
	typedef const vec3&   bvec3;
	typedef const float3& bfloat3;
	
#else
	typedef const vec3&   avec3;
	typedef const float3& afloat3;
	typedef const vec3&   bvec3;
	typedef const float3& bfloat3;
	
#endif
	
} // namespace fw

using fw::vec3;
using fw::float3;
using fw::avec3;
using fw::afloat3;
using fw::bvec3;
using fw::bfloat3;
